#include "ringBuffer.hpp"
#include <pthread.h>
#include <memory>
#include <unistd.h>
#include <ctime>
using namespace ringBufferModule;

void *Consumer(void *args)
{
    auto ring_buffer = static_cast<ringBuffer<int> *>(args);

    while (true)
    {
        sleep(1); // 模拟消费的时间
        int data;
        ring_buffer->pop(&data);
        std::cout << "消费了一个数据: " << data << std::endl;
    }

    return nullptr;
}

void *Productor(void *args)
{
    auto ring_buffer = static_cast<ringBuffer<int> *>(args);
    int data = 0;
    while (true)
    {
        // sleep(1); // 模拟生产的时间
        ring_buffer->equeue(data);
        std::cout << "生产了一个数据: " << data++ << std::endl;
    }

    return nullptr;
}

int main()
{

    auto ring_buffer = new ringBuffer<int>(5); // 这样他就成为了共享资源
    pthread_t c1, c2, c3, p1, p2;
    pthread_create(&c1, nullptr, Consumer, ring_buffer);
    pthread_create(&c2, nullptr, Consumer, ring_buffer);
    pthread_create(&c3, nullptr, Consumer, ring_buffer);
    pthread_create(&p1, nullptr, Productor, ring_buffer);
    pthread_create(&p2, nullptr, Productor, ring_buffer);

    pthread_join(c1, nullptr);
    pthread_join(c2, nullptr);
    pthread_join(c3, nullptr);
    pthread_join(p1, nullptr);
    pthread_join(p2, nullptr);

    delete ring_buffer; // 释放资源
    return 0;
}